#include <bits/stdc++.h>

using namespace std;

const int maxn=200005;
char str[maxn];
int a[maxn],sa[2][maxn],rnk[2][maxn];
int cnt[maxn];


void calsa(int *sa,int *rank,int *SA,int *Rank,const int &n,const int &k)
{
    int *v=cnt;
     /*for(int i=1;i<=n;++i)v[rank[sa[i]]]=i;
     for(int i=n;i>=1;--i)
         if(sa[i]>k)
             SA[v[rank[sa[i]-k]]--]=sa[i]-k;
     for(int i=n-k+1;i<=n;++i)
         SA[v[rank[i]]--]=i;*/
     for(int i=1;i<=n;++i)
         Rank[SA[i]]=Rank[SA[i-1]]+(rank[SA[i-1]]!=rank[SA[i]]||rank[SA[i-1]+k]!=rank[SA[i]+k]);
}

int *buildSuffixArray(const int &n){
    int *csa,*crk,*psa,*prk;
    csa=sa[0];crk=rnk[0];psa=sa[1];prk=sa[1];
    for(int i=1;i<=n;i++) cnt[a[i]]++;
    for(int i=2;i<=256;i++) cnt[i]+=cnt[i-1];
    for(int i=1;i<=n;i++) csa[cnt[a[i]]--]=i;
    for(int i=1;i<=n;i++){
        crk[csa[i]]=crk[csa[i-1]];
        if(a[csa[i]]!=a[csa[i-1]]) crk[csa[i]]++;
    }

    int k=1;
    while(k<n){
        swap(csa,psa);swap(crk,prk);
        for(int i=1;i<=n;i++) cnt[prk[psa[i]]]=i;
        for(int i=n;i>=1;i--)
            if(psa[i]>k)
                csa[cnt[prk[psa[i]-k]]--]=psa[i]-k;
        for(int i=n-k+1;i<=n;i++) csa[cnt[prk[i]]--]=i;
        /*for(int i=1;i<=n;i++){
            crk[csa[i]]=crk[csa[i-1]];
            if(prk[csa[i-1]]!=prk[csa[i]]||prk[csa[i-1]+k]!=prk[csa[i]+k]) crk[csa[i]]++;
        }*/
        for(int i=1;i<=n;i++)
            crk[csa[i]]=crk[csa[i-1]]+(prk[csa[i-1]]!=prk[csa[i]]||prk[csa[i-1]+k]!=prk[csa[i]+k]);
                                    //(prk[csa[i-1]]!=prk[csa[i]]||prk[csa[i-1]+k]!=prk[csa[i]+k])
        //calsa(psa,prk,csa,crk,n,k);
        k<<=1;
    }

    return csa;
}

int main(){
    int n;
    scanf("%s",str+1);
    n=strlen(str+1);
    for(int i=1;i<=n;i++) a[i]=a[i+n]=str[i];
    int *s=buildSuffixArray(n*2);
    for(int i=1;i<=n*2;i++){
        if(s[i]<=n) printf("%c",str[s[i]]);
    }
    putchar('\n');
    for(int i=1;i<=n*2;i++) printf("%d ",s[i]);
    putchar('\n');

    return 0;
}
